home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / program / libkb100.zip / LIBKB-1.00 / SAMPLES / SIGALRM.C < prev    next >
C/C++ Source or Header  |  1996-07-23  |  2KB  |  84 lines

  1. /* sigalrm.c -- test of the emergency alarm feature of libkb
  2.  * Copyright (C) 1995, 1996 Markus F.X.J. Oberhumer
  3.  * For conditions of distribution and use, see copyright notice in kb.h 
  4.  */
  5.  
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <signal.h>
  11.  
  12. #include <kb.h>
  13. #include "intro.h"
  14.  
  15.  
  16. /***********************************************************************
  17. // 
  18. ************************************************************************/
  19.  
  20. int main(int argc, char *argv[])
  21. {
  22.     char s[80+1];
  23.     unsigned long f = 0;
  24.  
  25.     if (argc < 0 || argv == NULL)    /* avoid warning about unused args */
  26.         return 0;
  27.  
  28.     fputs("\n",stdout);
  29.     fputs(_kb_intro_text(s),stdout);
  30.     fputs("\n\n",stdout);
  31.  
  32. #if 0 && defined(SIGALRM)
  33.     /* for testing the correct settings of kb_kbflags() */
  34.     signal(SIGALRM,SIG_IGN);
  35. #endif
  36.  
  37.     f |= KB_FLAG_EMERGENCY_EXIT | KB_FLAG_EMERGENCY_SIGALRM;
  38.     if (kb_install(f) != 0)
  39.     {
  40.         printf("Couldn't install keyboard handler !\n");
  41.         exit(1);
  42.     }
  43.     if (!(kb_flags() & KB_FLAG_EMERGENCY_SIGALRM))
  44.     {
  45.         kb_remove();
  46.         printf("Couldn't install KB_FLAG_EMERGENCY_SIGALRM !\n");
  47.         exit(1);
  48.     }
  49.  
  50.     printf(KB_INSTALLED_MSG);
  51.     printf("\n");
  52.  
  53. #if defined(__KB_LINUX)
  54.     printf("\nPlease be patient, program should terminate in 30 seconds.\n");
  55. #else
  56.     printf("Press LControl-RControl-C to quit.\n");
  57.     printf("\nProgram should terminate in 30 seconds.\n");
  58. #endif
  59.  
  60.     /* This loop causes the program to hang under Linux because 
  61.      * kb_update() is not called. KB_FLAG_EMERGENCY_SIGALRM will 
  62.      * raise SIGALRM if kb_update() is not called for 30 seconds.
  63.      */
  64.  
  65.     for (;;)
  66.     {
  67.         if (kb_key(KB_SCAN_Q))
  68.         {
  69.             if ((kb_key(KB_SCAN_LCONTROL) || kb_key(KB_SCAN_RCONTROL)) &&
  70.                 (kb_key(KB_SCAN_LSHIFT) || kb_key(KB_SCAN_RSHIFT)))
  71.                 break;
  72.             if (kb_key(KB_SCAN_ALTGR))
  73.                 break;
  74.         }
  75.     }
  76.  
  77.     return 0;
  78. }
  79.  
  80.  
  81. /*
  82. vi:ts=4
  83. */
  84.